Repository Public
1// Auteur : Simon-Pierre Boucher — contact@spboucher.ai2// /api/admin/mail/[id] — actions sur un courriel de SA boîte (lu/non-lu,3// archiver, corbeille, restaurer) ; un super admin peut aussi s'attribuer4// un message non routé. Jamais d'accès à la boîte d'un autre admin.5import { NextRequest, NextResponse } from "next/server";6import { getAdminSession } from "@/lib/comms/admin-auth";7import { findMail, canAccessMail, updateMail, MAIL_FOLDERS } from "@/lib/comms/mail";89export async function PATCH(10 req: NextRequest,11 { params }: { params: Promise<{ id: string }> },12) {13 const session = await getAdminSession();14 if (!session)15 return NextResponse.json({ error: "Non autorisé." }, { status: 401 });16 const id = Number((await params).id);17 const mail = Number.isInteger(id) ? findMail(id) : undefined;18 const superAdmin = session.roles.includes("super_admin");19 if (!mail || !canAccessMail(mail, session.id, superAdmin))20 return NextResponse.json({ error: "Message introuvable." }, { status: 404 });2122 const body = (await req.json().catch(() => null)) as {23 is_read?: boolean;24 folder?: string;25 claim?: boolean;26 } | null;27 if (!body)28 return NextResponse.json({ error: "Requête illisible." }, { status: 400 });2930 if (typeof body.is_read === "boolean")31 updateMail(mail.id, { is_read: body.is_read });32 if (typeof body.folder === "string") {33 if (!(body.folder in MAIL_FOLDERS))34 return NextResponse.json({ error: "Dossier inconnu." }, { status: 422 });35 updateMail(mail.id, { folder: body.folder });36 }37 // s'attribuer un message non routé (super admin)38 if (body.claim === true && mail.admin_id === null && superAdmin)39 updateMail(mail.id, { admin_id: session.id });4041 return NextResponse.json({ ok: true });42}43